/*-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License.You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
	
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
	
The Original Code is Fever RS ( ActionScript 3 ) Framework code.
	
The Initial Developer of the Original Code is Romain Ecarnot.
Portions created by Initial Developer are Copyright (C) 2006
the Initial Developer. All Rights Reserved.
	
Contributor(s):
	
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-----------------------------------------------------------------------------*/

package fever.events 
{
	import flash.events.Event;
	
	import com.bourre.events.BasicEvent;
	
	import fever.app.memory.MemoryController;
	import fever.utils.Stringifier;	

	/**
	 * The MemoryEvent class represents the event object passed to the event 
	 * listener for <strong>MemoryController</strong> events.
	 * 
	 * @see fever.utils.MemoryController
	 * 
	 * @author Romain Ecarnot
	 */
	final public class MemoryEvent extends BasicEvent
	{
		//--------------------------------------------------------------------
		// Events
		//--------------------------------------------------------------------
		
		/**
		 * Defines the value of the <code>type</code> property of the event 
		 * object for a <code>onMemoryChange</code> event.
		 * 
		 * <p>The properties of the event object have the following values:</p>
		 *  <table class="innertable">
		 *     <tr><th>Property</th><th>Value</th></tr>
		 *     <tr>
		 *     	<td><code>target</code></td>
		 *     	<td>The Object that defines the event listener that handles the event</td>
		 *     </tr>
		 *     <tr>
		 *     	<td><code>type</code></td>
		 *     	<td>Dispatched event type</td>
		 *     </tr>
		 *     <tr>
		 *     	<td><code>totalMemory</code></td>
		 *     	<td>The amount of memory (in bytes) currently in use by Adobe� Flash� Player</td>
		 *     </tr>    
		 *     
		 *     <tr><th>Method</th><th>Value</th></tr>
		 *     <tr>
		 *     	<td><code>getTarget()</code>
		 *     	</td><td>The Object that defines the
		 *       event listener that handles the event</td></tr>
		 *     <tr>
		 *     	<td><code>getType()</code></td>
		 *     	<td>Dispatched event type</td>
		 *     </tr>
		 *  </table>
		 * 
		 * @eventType onMemoryChange
		 */
		public static const onChangeEVENT : String = "onMemoryChange";

		/**
		 * Defines the value of the <code>type</code> property of the event 
		 * object for a <code>onMemoryOverflow</code> event.
		 * 
		 * <p>The properties of the event object have the following values:</p>
		 *  <table class="innertable">
		 *     <tr><th>Property</th><th>Value</th></tr>
		 *     <tr>
		 *     	<td><code>target</code></td>
		 *     	<td>The Object that defines the event listener that handles the event</td>
		 *     </tr>
		 *     <tr>
		 *     	<td><code>type</code></td>
		 *     	<td>Dispatched event type</td>
		 *     </tr>
		 *     <tr>
		 *     	<td><code>totalMemory</code></td>
		 *     	<td>The amount of memory (in bytes) currently in use by Adobe� Flash� Player</td>
		 *     </tr>
		 *     
		 *     <tr><th>Method</th><th>Value</th></tr>
		 *     <tr>
		 *     	<td><code>getTarget()</code>
		 *     	</td><td>The Object that defines the
		 *       event listener that handles the event</td></tr>
		 *     <tr>
		 *     	<td><code>getType()</code></td>
		 *     	<td>Dispatched event type</td>
		 *     </tr>
		 *  </table>
		 * 
		 * @eventType onMemoryOverflow
		 */
		public static const onOverflowEVENT : String = "onMemoryOverflow";

		
		//--------------------------------------------------------------------
		// Public properties
		//--------------------------------------------------------------------

		public function get totalMemory( ) : uint 
		{ 			return MemoryController.totalMemory;
		}
		
		
		//--------------------------------------------------------------------
		// Public API
		//--------------------------------------------------------------------
		
		/**
		 * Constructor.
		 * 
		 * @param eventType Event type
		 * @param controller MemoryController instance
		 */
		public function MemoryEvent( eventType : String )
		{
			super( eventType );
		}

		/**
		 * Returns <strong>MemoryEvent</strong> clone instance.
		 */
		override public function clone() : Event
		{
			return new MemoryEvent( _sType );
		}

		/**
		 * Returns string representation.
		 */
		override public function toString( ) : String
		{
			return Stringifier.parse( this );	
		}
	}
}


